/**
 * 分页模块
 */

const { isAllKeysEmpty } = require("./common");

// 每页显示的记录数
const PAGE_SIZE = 10;

/**
 * 模糊查询对象数组（仅检查字符串类型字段）
 * @param {Array} arr - 要查询的对象数组
 * @param {string} keyword - 搜索关键词（不区分大小写）
 * @param {Array} [fields] - 可选，指定要检查的字段（默认检查所有字符串字段）
 * @returns {Array} 匹配的对象数组
 */
function fuzzySearch(arr, keyword, fields) {
    if (!keyword) return arr; // 无关键词直接返回原数组
    const lowerKeyword = keyword.toLowerCase();
    
    return arr.filter(item => {
      // 若指定了 fields，则检查这些字段；否则检查所有属性
      const checkKeys = fields || Object.keys(item);
      
      return checkKeys.some(key => {
        const value = item[key];
        // 仅处理字符串类型的值，并进行模糊匹配
        return typeof value === 'string' && 
               value.toLowerCase().includes(lowerKeyword);
      });
    });
  }

/**
 * 数据分页方法
 * @param {*} array 数组
 * @param {*} currentPage 当前页
 * @param {*} itemsPerPage 每页数
 * @param {*} searchParams 查询条件
 * @returns 
 */
function paginateArray(array, currentPage, itemsPerPage, searchParams) {
    // 判断是否参数查询
    if (!isAllKeysEmpty(searchParams)) {
        console.log('搜索条件', searchParams);
        // 遍历模糊查询字段是否存在
        const newArr = [];

        for (const key in searchParams) {
            console.log(1, searchParams[key],!searchParams[key]);
            if(!searchParams[key]){
                continue;
            }
            console.log(2);
            array.forEach((item) => {   
                console.log('搜索条件123', key, searchParams[key], item[key]);
                if (item[key].includes(searchParams[key])) {
                    if(newArr.find((i) => i.id === item.id)){
                        return;
                    }
                    newArr.push(item);
                }
            })

        }

        array = newArr;
    }
    
    // 计算总条数
    const total = array.length;
    // 计算总页数
    const totalPages = Math.ceil(array.length / itemsPerPage);

    // 确保当前页在有效范围内
    if (currentPage < 1 || currentPage > totalPages) {
        return {
            page: currentPage,
            totalPages: totalPages,
            items: []
        };
    }

    // 计算起始和结束索引
    const startIndex = (currentPage - 1) * itemsPerPage;
    const endIndex = startIndex + itemsPerPage;

    // 提取当前页的数据
    const items = array.slice(startIndex, endIndex);

    return {
        page: currentPage,
        total,
        list: items
    };
}

module.exports = { PAGE_SIZE, paginateArray }